package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.product.RCProductEntry;
import com.shrct.businessprocess.product.RCProductSpecification;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.IHasAcceptedProducts;
import com.shrct.businessprocess.purchase.RCBudgetContractProductItem;
import com.shrct.businessprocess.purchase.RCProductInStockEvent;
import com.shrct.businessprocess.purchase.RCPurchaseOrder;
import com.shrct.businessprocess.purchase.impl.RCPurchaseOrderItemImpl;
import com.shrct.businessprocess.purchase.proxy.RCPurchaseOrderItemProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;

@EntityImplementation(implementBy = RCPurchaseOrderItemImpl.class)
public interface RCPurchaseOrderItem extends IModelObject, IHasAcceptedProducts {
  public abstract RCPurchaseOrder getPurchaseOrder();
  
  public abstract RCPurchaseOrderItem setPurchaseOrder(final RCPurchaseOrder purchaseOrder);
  
  public abstract RCProductSpecification getProductSpec();
  
  public abstract RCPurchaseOrderItem setProductSpec(final RCProductSpecification productSpec);
  
  public abstract Integer getQuantity();
  
  public abstract RCPurchaseOrderItem setQuantity(final Integer quantity);
  
  public abstract Date getExpectDate();
  
  public abstract RCPurchaseOrderItem setExpectDate(final Date expectDate);
  
  public abstract RCProjectMoney getPrice();
  
  public abstract RCPurchaseOrderItem setPrice(final RCProjectMoney price);
  
  public abstract Integer getTotalAcceptItemsQuantity();
  
  public abstract Boolean getIsAllItemsAccepted();
  
  public abstract Boolean getIsExpectDateOverDue();
  
  public abstract Integer getTotalInStockQuantity();
  
  public abstract Integer getTotalDeliveredQuantity();
  
  public abstract Collection<RCProductInStockEvent> getInStockEvents();
  
  public abstract RCProjectMoney getUnitPrice();
  
  public abstract Collection<RCBudgetContractProductItem> findBudgetItemCandidates(final String title);
  
  public abstract Collection<RCBudgetContractProductItem> findBudgetItemCandidates();
  
  public abstract Collection<RCProductEntry> getAllAcceptedProducts();
  
  public abstract RCPurchaseOrderItemProxy toProxy();
}
